Imagens sintéticas são bastante utilizadas nos testes de algoritmos e na geração de padrões de imagens.
Iremos aprender a gerar os valores dos pixels de uma imagem a partir de uma equação matemática
de forma muito eficiente, sem a necessidade de se usar explicitamente a varredura dos
pixels através do comando for
.
A forma preferencial de criação de imagens sintéticas, quando sua equação é fornecida, é
através do uso das funções que geram uma matriz de coordenadas. As duas funções que
iremos utilizar neste curso são indices
e meshgrid
.
Estude o tutorial em:
Ele é fundamental para entender os exemplos a seguir.
In [14]:
import numpy as np
A função "sela" bidimensional é uma função dada pelo produto de suas coordenadas r
e c
.
Observe que, implementando desta forma, é possível fazer com que o código Python/NumPy fique
muito próximo à equação matemática, colocada a seguir.
Vamos gerar uma função sela, onde os valores para as linhas serão valores inteiros entre -75 e 75 e os valores para as colunas, inteiros no intervalo [-100,100]:
$$ f(r,c) = r \ c $$$$ \text{para} \ r \in [-75,75] $$$$ c \in [-100,100]$$No exemplo a seguir é utilizado a função arange
para gerar os vetores de coordenadas. Para melhorar
a visualização foi utilizada a função ia636:iaisolines iaisolines
que permite visualizar os
pixels de mesmo valores (isolinhas) da imagem gerada com uma cor destacada.
In [15]:
r,c = np.meshgrid(np.arange(-75,75), np.arange(-100,100), indexing='ij')
f = r * c
In [20]:
%matplotlib inline
import matplotlib.pyplot as plt
plt.title('Ponto de sela')
plt.imshow(f, cmap='gray')
Out[20]:
Veja algumas outras funções da toolbox ia636:MainPage
que também foram feitas desta forma:
Uma função também escrita com índices matriciais, porém muito mais complexa de entender é a ia636:iagaussian
. Veja
que o código é extremamente curto, porém bastante complexo e ela ainda funciona para qualquer dimensão, desde 1-D, 2-D,
3-D, isto é, n-D. Para quem estiver interessado em entender como ela funciona, existe uma demonstração que procura
explicar seu funcionamento em